<?php
namespace app\command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use think\facade\Db;

class ClearDatabaseCommand extends Command
{
    protected static $defaultName = 'clear:database';
    protected static $defaultDescription = '清空数据，重新建站';

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $output->writeln('清空默认数据，重新建站');
        $io      = new SymfonyStyle($input, $output);
        $rebuild = $io->confirm("确定要清空数据吗？", true);

        if (!$rebuild) {
            $output->writeln("取消清空数据");
            return parent::SUCCESS;
        }

        $triggerTime = time();
        // 清空数据库表
        $rebuild_table_name = ['admin_log', 'channel_account', 'comment_like', 'goods', 'goods_category', 'goods_comment', 'goods_content_manager', 'goods_content_text', 'goods_content_chapter', 'goods_content_file', 'goods_content_group', 'goods_order', 'goods_spec', 'goods_spec_relation', 'goods_tag', 'goods_tag_relation', 'order_master', 'system_uploads', 'system_uploads_category', 'user', 'user_favorite', 'user_level', 'user_order', 'user_points_log', 'user_sign_log', 'user_view_log', 'user_vip', 'user_vip_record'];


        foreach ($rebuild_table_name as $table_name) {
            $output->writeln("正在清空表：{$table_name}...");
            Db::query("truncate table {$table_name}");
        }

        // 删除系统配置
        // Db::name('system_config')->where('name', 'site_name')->update(['value' => '']);
        // Db::name('system_config')->where('name', 'site_keywords')->update(['value' => '']);
        // Db::name('system_config')->where('name', 'site_desc')->update(['value' => '']);
        // Db::name('system_config')->where('name', 'site_subtitle')->update(['value' => '']);
        // Db::name('system_config')->where('name', 'site_info_copyright')->update(['value' => '']);
        // Db::name('system_config')->where('name', 'site_logo')->update(['value' => '']);
        // Db::name('system_config')->where('name', 'merchant_logo_sm')->update(['value' => '']);

        // 删除内容附件 storage下的所有文件
        $storage_path = base_path() . '/storage';
        if (is_dir($storage_path)) {
            $output->writeln("正在删除内容附件：{$storage_path}...");
            // 进入 storage 目录
            chdir($storage_path);
            // 一键清空
            exec('rm -rf *');
            $output->writeln("内容附件删除完成");
        }

        // 返回进 public upload 目录
        chdir(base_path() . '/public/upload');
        // 一键清空
        exec('rm -rf *');
        $output->writeln("public upload 目录删除完成");

        $timeUsed = time() - $triggerTime;
        $output->writeln("info: 清空数据执行完成，用时：{$timeUsed}秒");

        return parent::SUCCESS;
    }
}
